package Exercise;
/**本类用于【多态】中的成员元素测试【静态资源】+【继承+重写】*/
public class TestPoly {
    public static void main(String[] args) {
        Son s = new Son();//创建子类对象
        System.out.println(s.sum);//20  //赋值前：子类调用本类成员变量;就近原则！！
        s.sum=123;//赋值后：再给子类成员变量赋值
        System.out.println(s.sum);//123
        s.say();/**重写父类普通方法，但修改了功能显示，打印子类的输出语句*/
        s.play();/**虽没有重写父类的静态方法，但属于相同的静态声明方法，打印子类自身的输出语句*/
        //创建多个子类对象
        Son s2 = new Son();
        s2.say();
        s2.play();
        //创建【多态】对象
        Father f = new Son();
        System.out.println(f.sum);//10
        f.say();
        f.play();
    }
}
/*1.创建父类 */
class Father{
    int sum =10;//父类-普通成员变量
    public void say(){//父类-成员方法==普通方法
        System.out.println("我爱你，儿子");
    } //普通方法
    public  static  void play(){ //父类的静态方法
        System.out.println("咱们一起出去玩把");
    }//创建父类的静态方法

}
/*2.子类继承父类 */
class Son extends Father{ //【多态的前提：继承+重写】 super也是！！！！！
    int sum=20;  //子类普通成员变量
    /*1.子类可以[重写]父类的普通say()方法 */
    @Override //表示重写普通方法，提示注解
    public void say() {
        System.out.println("儿子在干嘛呢");
    }
    /*2.子类不可以重写父类的静态方法play() ；即不能使用@Override这个注解；但可以 声明和父类同样的静态方法！！*/
    //@Override //这里不是重写父类的静态方法,不能加这个注解；否则报错！！！！
    public  static  void play(){ //子类的静态方法  类似于 父类的静态方法
        System.out.println("等一下去买吃的好吗");
    }
}



